package org.example;

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.Scanner;

public class Demo2_DataSource {

    //这个不需要 再加载类 因为 DdaSource会自动加载类
    public static void main(String[] args) {
        //定义mysql数据源对象
        MysqlDataSource mysqlDataSource = new MysqlDataSource();

        //设置mysql数据连接串
        mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/java113?characterEncoding=utf8&allowPublicKeyRetrieval" +
                "=true&useSSL=false");
        //定义用户名
        mysqlDataSource.setUser("root");
        // 密码
        mysqlDataSource.setPassword("123k456x");

        //上面的操作等于于sql创建了连接

        //但是再 Java当中 我们要使用 jdbc的数据源

        //定义jdbc的数据源
        //数据库的数据源继承了datasource接口
        DataSource dataSource = mysqlDataSource;


        Connection connection = null;

        PreparedStatement statement = null;

        //预处理 解决了 不合法输入导致所有数据 都查询到的情况
        ResultSet resultSet = null;
        try {
            //1.创建连接
            connection = dataSource.getConnection();
            //2.创建 sql执行对象
            //这里的？是一个占位符1当输入数据会自动填入里面 并加引号
            String sql = "select id,name,sn from stu1 where name = ?";
            statement = connection.prepareStatement(sql);
            //输入学生的姓名
            System.out.println("请输入学生姓名：");
            Scanner sc = new Scanner(System.in);
            String name = sc.nextLine();
//            long id = sc.nextLong();
            //创建 占位符 和真实值的联系
            //多个占位符在后面 按照顺序 写
            statement.setString(1,name);
//            statement.setLong(2,id);
            //执行结果
            resultSet = statement.executeQuery();
            //遍历结果集
            while(resultSet.next()){
                long stuId = resultSet.getLong(1);
                String stuName  = resultSet.getString(2);
                long stuSn = resultSet.getLong(3);
                System.out.println(MessageFormat.format(" 学生编号 = {0}，学生姓名 = {1}，学生学号 = {2}",stuId,stuName,stuSn));
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
    }
    }
}
